#ifndef _EQUIPA_H_
#define _EQUIPA_H_

#include <string>
#include <vector>
#include "jogador.h"

using std::string;
using std::vector;

//! Classe Equipa
/*! Representa uma equipa */
class Equipa
{
public:
    //! Construtor que recebe treinador e nome da equipa
    /*!
      Cada equipa e constituida por um vector de jogadores, que correspondem ao plantel.
      Cada objecto desta classe representa uma num dado campeonato.

      \param coach treinador da equipa
      \param nome_equipa nome da equipa
    */
    Equipa(string coach, string nome_equipa);
    //! Destrutor
    ~Equipa() {};

    //! Adiciona um jogador ao plantel
    /*!
      \param jogador Objecto do tipo Jogador, a ser adicionado ao plantel
    */
    void adicionarJogador(Jogador jogador);

    //! Remove um jogador do plantel com um certo nome
    /*!
      \param nome nome do jogador a remover

      \return Devolve true se remover o jogador, ou false se ele nao existir
    */
    bool removerJogador(string nome);

    //! Devolve o treinador
    string getTreinador();

    //! Muda o nome do treinador
    /*!
      \param nome nome do novo treinador
    */
    void mudarTreinador(string nome);
    //! Devolve o nome da equipa
    string getNomeEquipa();

    //! Imprime o nome dos jogadores do plantel
    void imprimir();

    //! Devolve o tamanho do plantel
    int tamanhoPlantel() { return plantel.size(); }

    //! Devolve um vector<Jogador> que corresponde ao plantel da equipa
    vector<Jogador>& getPlantel() { return plantel; }

    //! Verifica se esta equipa e igual a outra
    /*!
      Permite comparar esta equipa com outra.
      A comparacao e feita em 3 partes:
      Primeiro compara os nomes das equipas
      Depois compara os nomes dos treinadores
      Depois compara cada jogador dos planteis que estao na mesma posicao no vector, comparando os seus nomes e idades.
      Se se conseguir efectuar estas comparacoes todas sem haver falhas, as equipas sao consideradas iguais.

      \param Eq1 Objecto correspondente a equipa a que se vai comprar esta

      \return Devolve true se as duas equipas forem consideradas iguais, ou false se forem consideradas diferentes
    */
    bool operator==(Equipa& Eq1);

private:

    //! Declaracao do vector de jogadores plantel
    vector<Jogador> plantel;
    //! Variavel privada treinador
    string treinador;
    //! Variavel privada nomeEquipa
    string nomeEquipa;
};

//! Excepcao EquipaCheia
/*!
  Cada equipa de hockey esta limitada a 10 jogadores:
  1 Guarda-Redes
  4 Jogadores em campo
  1 Guarda redes suplente
  4 Jogadores suplentes
  (O tipo de jogadores nao e considerado neste programa. Esta excepcao so e activada se o plantel ja tiver 10 jogadores ao tentar adicionar-lhe mais um.
*/
class EquipaCheia
{
    EquipaCheia();
};

#endif /* _EQUIPA_H_ */
